Add new scenario ПроверкаКорректностиXML#52
Add new scenario ПроверкаКорректностиXML#52Kirill wants to merge 1 commit intobia-technologies:developfrom
Conversation
WalkthroughДобавлен сценарий "ПроверкаКорректностиXML" для фильтрации файлов по дескрипторам и синтаксической проверки XML: экспортированы функции ИмяСценария и ОбработатьФайл; при обработке ведётся логирование, чтение файла и обработка исключений валидности XML. Changes
Sequence Diagram(s)sequenceDiagram
participant Caller as Вызывающая сторона
participant Module as ПроверкаКорректностиXML
participant Logger as Логгер
participant FS as Файловая система / XML Reader
Caller->>Module: ОбработатьФайл(АнализируемыйФайл, Каталог, Доп.Параметры)
alt Тип файла соответствует дескриптору
Module->>Logger: Лог: начало обработки
Module->>FS: Открыть и читать XML (построчно/итерация)
alt Успешное чтение до конца
FS-->>Module: Чтение завершено
Module->>Logger: Лог: успешная валидация
Module-->>Caller: true
else Ошибка парсинга/синтаксиса
FS-->>Module: Исключение
Module->>Logger: Лог: ошибка с путём файла
Module-->>Caller: перебросить исключение
end
else Несоответствие типа
Module-->>Caller: false
end
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~20 minutes Poem
Pre-merge checks and finishing touches✅ Passed checks (3 passed)
✨ Finishing touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 1
🧹 Nitpick comments (1)
src/СценарииОбработки/ПроверкаКорректностиXML.os (1)
40-40: Уберите неиспользуемое получение настроек.
НастройкиСценариянигде не применяется, поэтому вызовДополнительныеПараметры.Настройки.Получить()только расходует ресурсы и потенциально может бросить исключение при отсутствии ключа. Предлагаю удалить строку до появления реального использования.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (1)
src/СценарииОбработки/ПроверкаКорректностиXML.os(1 hunks)
🧰 Additional context used
🧠 Learnings (1)
📚 Learning: 2025-11-03T09:51:07.133Z
Learnt from: Kyrales
Repo: bia-technologies/precommit4onec PR: 48
File: src/СценарииОбработки/СинхронизацияОбъектовМетаданныхИФайлов.os:0-0
Timestamp: 2025-11-03T09:51:07.133Z
Learning: В функции СинхронизироватьМетаданныеИФайлыПВХ в файле src/СценарииОбработки/СинхронизацияОбъектовМетаданныхИФайлов.os массив МассивОшибокПриПоискеФайловОбъектов намеренно игнорируется, так как эти ошибки актуальны только для функции СинхронизироватьМетаданныеИФайлы(), но не для обработки планов видов характеристик (ПВХ).
Applied to files:
src/СценарииОбработки/ПроверкаКорректностиXML.os
|
|
||
| Лог = ДополнительныеПараметры.Лог; | ||
| НастройкиСценария = ДополнительныеПараметры.Настройки.Получить(ИмяСценария()); | ||
| Если АнализируемыйФайл.Существует() И ( |
There was a problem hiding this comment.
Почему только данные файлы анализируются?
There was a problem hiding this comment.
А какие еще есть варианты проверить, что файлы XML, и принадлежат вообще проекту, а не документация с кривой XML?
Добавлен новый сценарий валидации XML-файла без логики
There was a problem hiding this comment.
Actionable comments posted: 0
♻️ Duplicate comments (1)
src/СценарииОбработки/ПроверкаКорректностиXML.os (1)
61-79: Закрывайте XML-читатель в блоке исключения.Если валидация выбрасывает исключение до вызова
ФайлXML.Закрыть()на строке 69, файловый дескриптор остаётся открытым. При обработке множества файлов это может привести к исчерпанию дескрипторов или блокировке файлов.🔎 Рекомендуемое исправление
Вариант 1 (предпочтительный): Использование try/finally для гарантированного закрытия
Процедура ПроверитьНаКорректностьXML(ПутьКФайлуМодуля) ФайлXML = Новый ЧтениеXML(); Попытка ФайлXML.ОткрытьФайл(ПутьКФайлуМодуля); ФайлXML.ПерейтиКСодержимому(); Пока ФайлXML.Прочитать() Цикл КонецЦикла; - ФайлXML.Закрыть(); Исключение Инфо = ИнформацияОбОшибке(); ТекстОшибки = СтрШаблон("В файле '%1' нарушена корректность XML: %2", ПутьКФайлуМодуля, Инфо.Описание); Лог.Ошибка(ТекстОшибки); ВызватьИсключение ТекстОшибки; - + Конечно + Попытка + ФайлXML.Закрыть(); + Исключение + КонецПопытки; КонецПопытки; КонецПроцедурыВариант 2: Закрытие в обработчике исключения
Попытка ФайлXML.ОткрытьФайл(ПутьКФайлуМодуля); ФайлXML.ПерейтиКСодержимому(); Пока ФайлXML.Прочитать() Цикл КонецЦикла; ФайлXML.Закрыть(); Исключение + Попытка + ФайлXML.Закрыть(); + Исключение + КонецПопытки; Инфо = ИнформацияОбОшибке(); ТекстОшибки = СтрШаблон("В файле '%1' нарушена корректность XML: %2", ПутьКФайлуМодуля, Инфо.Описание); Лог.Ошибка(ТекстОшибки); ВызватьИсключение ТекстОшибки;
🧹 Nitpick comments (1)
tests/ТестПроверкаСценариевОбработки.os (1)
352-417: Тесты корректной обработки XML-файлов реализованы правильно.Тесты охватывают различные типы XML-файлов (конфигурации, формы, метаданные, планы обмена, функциональные опции) в форматах конфигуратора и EDT. Логика проверки единообразна и понятна.
Код содержит значительное повторение, но это приемлемо для ясности тестов. При желании можно вынести общую логику в вспомогательный метод.
🔎 Опциональная оптимизация: вынести повторяющуюся логику в помощник
Можно создать вспомогательную процедуру для уменьшения дублирования:
Процедура ПроверитьОбработкуXMLФайла(ОбъектСценария, ОтносительныйПуть, ОписаниеФайла, ДополнительныеНастройки) Файл = Новый Файл(ОбъединитьПути(КаталогТестовыхФикстур(), "ПроверкаКорректностиXML", ОтносительныйПуть)); Результат = ОбъектСценария.ОбработатьФайл(Файл, Файл.Путь, ДополнительныеНастройки); Ожидаем.Что(Результат, ОписаниеФайла + " должен быть обработан").ЭтоИстина(); КонецПроцедурыЗатем использовать:
ПроверитьОбработкуXMLФайла(ОбъектСценария, "Configurator\Configuration.xml", "Configuration.xml", ДополнительныеНастройки);
📜 Review details
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (18)
src/СценарииОбработки/ПроверкаКорректностиXML.ostests/fixtures/ПроверкаКорректностиXML/Catalogs/Справочник/Некорректные/Справочник.xmltests/fixtures/ПроверкаКорректностиXML/Catalogs/Справочник/Справочник.mdotests/fixtures/ПроверкаКорректностиXML/Catalogs/Справочник/Справочник.xmltests/fixtures/ПроверкаКорректностиXML/Configurator/Configuration.xmltests/fixtures/ПроверкаКорректностиXML/Configurator/Некорректные/Configuration.xmltests/fixtures/ПроверкаКорректностиXML/EDT/Configuration.mdotests/fixtures/ПроверкаКорректностиXML/EDT/Некорректные/Configuration.mdotests/fixtures/ПроверкаКорректностиXML/ExchangePlans/ПланОбмена/Content.xmltests/fixtures/ПроверкаКорректностиXML/ExchangePlans/ПланОбмена/Некорректные/Content.xmltests/fixtures/ПроверкаКорректностиXML/ExchangePlans/ПланОбмена/ПланОбмена.mdotests/fixtures/ПроверкаКорректностиXML/Forms/Configurator/Form.xmltests/fixtures/ПроверкаКорректностиXML/Forms/Configurator/Некорректные/Form.xmltests/fixtures/ПроверкаКорректностиXML/Forms/EDT/Form.formtests/fixtures/ПроверкаКорректностиXML/Forms/EDT/Некорректные/Form.formtests/fixtures/ПроверкаКорректностиXML/FunctionalOptions/ФункциональнаяОпция/ФункциональнаяОпция.mdotests/fixtures/ПроверкаКорректностиXML/FunctionalOptions/ФункциональнаяОпция/ФункциональнаяОпция.xmltests/ТестПроверкаСценариевОбработки.os
✅ Files skipped from review due to trivial changes (7)
- tests/fixtures/ПроверкаКорректностиXML/EDT/Некорректные/Configuration.mdo
- tests/fixtures/ПроверкаКорректностиXML/EDT/Configuration.mdo
- tests/fixtures/ПроверкаКорректностиXML/FunctionalOptions/ФункциональнаяОпция/ФункциональнаяОпция.mdo
- tests/fixtures/ПроверкаКорректностиXML/Catalogs/Справочник/Справочник.xml
- tests/fixtures/ПроверкаКорректностиXML/Catalogs/Справочник/Справочник.mdo
- tests/fixtures/ПроверкаКорректностиXML/Forms/EDT/Некорректные/Form.form
- tests/fixtures/ПроверкаКорректностиXML/Forms/Configurator/Некорректные/Form.xml
🧰 Additional context used
🧠 Learnings (1)
📚 Learning: 2025-11-03T09:51:07.133Z
Learnt from: Kyrales
Repo: bia-technologies/precommit4onec PR: 48
File: src/СценарииОбработки/СинхронизацияОбъектовМетаданныхИФайлов.os:0-0
Timestamp: 2025-11-03T09:51:07.133Z
Learning: В функции СинхронизироватьМетаданныеИФайлыПВХ в файле src/СценарииОбработки/СинхронизацияОбъектовМетаданныхИФайлов.os массив МассивОшибокПриПоискеФайловОбъектов намеренно игнорируется, так как эти ошибки актуальны только для функции СинхронизироватьМетаданныеИФайлы(), но не для обработки планов видов характеристик (ПВХ).
Applied to files:
src/СценарииОбработки/ПроверкаКорректностиXML.ostests/ТестПроверкаСценариевОбработки.os
🔇 Additional comments (16)
tests/fixtures/ПроверкаКорректностиXML/ExchangePlans/ПланОбмена/ПланОбмена.mdo (1)
1-9: Фикстура валидного XML корректна.Структура XML соответствует формату метаданных 1C для плана обмена. UUID является тестовым значением, что приемлемо для фикстур.
src/СценарииОбработки/ПроверкаКорректностиXML.os (2)
15-19: LGTM!Функция корректно возвращает имя сценария обработки.
41-48: Логика фильтрации файлов корректна.Сценарий проверяет корректность XML для основных типов метаданных 1C (конфигурация, формы, планы обмена, функциональные опции). Выбор этих типов обоснован — они являются ключевыми XML-файлами в структуре конфигурации 1C.
Тесты полностью покрывают все типы файлов, указанные в проверке. В файле tests/ТестПроверкаСценариевОбработки.os (область ПроверкаКорректностиXML, строки 350–474) присутствуют тесты для Configuration.xml/mdo, Form.xml/form, метаданных в обоих форматах, планов обмена и функциональных опций, а также дополнительные тесты на обработку несуществующих и некорректных файлов.
tests/fixtures/ПроверкаКорректностиXML/Forms/Configurator/Form.xml (1)
1-13: Фикстура валидного XML формы корректна.Структура соответствует формату метаданных форм 1C с правильными пространствами имён и версией.
tests/fixtures/ПроверкаКорректностиXML/Configurator/Configuration.xml (1)
1-15: Фикстура валидного XML конфигурации корректна.XML-структура соответствует формату метаданных конфигурации 1C.
tests/fixtures/ПроверкаКорректностиXML/ExchangePlans/ПланОбмена/Content.xml (1)
1-15: Фикстура валидного XML плана обмена корректна.Структура Content.xml соответствует формату метаданных плана обмена 1C.
tests/fixtures/ПроверкаКорректностиXML/FunctionalOptions/ФункциональнаяОпция/ФункциональнаяОпция.xml (1)
1-15: Фикстура валидного XML функциональной опции корректна.Структура соответствует формату метаданных функциональной опции 1C.
tests/fixtures/ПроверкаКорректностиXML/ExchangePlans/ПланОбмена/Некорректные/Content.xml (1)
1-15: Фикстура невалидного XML корректна для негативного теста.XML умышленно некорректен (незакрытый тег
ExchangePlanна строке 3), что должно приводить к ошибке при валидации. Это подходит для проверки обработки ошибок в сценарии.tests/fixtures/ПроверкаКорректностиXML/Catalogs/Справочник/Некорректные/Справочник.xml (1)
1-15: Фикстура невалидного XML корректна для негативного теста.XML умышленно некорректен: на строке 9 используется неэкранированный символ
&в содержимом (должен быть&). Это делает XML невалидным и подходит для проверки обработки ошибок парсинга.tests/fixtures/ПроверкаКорректностиXML/Configurator/Некорректные/Configuration.xml (1)
1-15: Тестовая фикстура корректна для негативного теста.Файл правильно содержит невалидный XML (незакрытый тег MetaDataObject) для проверки обработки ошибок. Комментарий на строке 14 чётко указывает на намеренную ошибку.
tests/fixtures/ПроверкаКорректностиXML/Forms/EDT/Form.form (1)
1-110: Тестовая фикстура корректна для позитивного теста.Файл содержит валидную XML-конфигурацию формы EDT с правильной структурой. Подходит для проверки корректной обработки XML-файлов.
tests/ТестПроверкаСценариевОбработки.os (5)
52-55: Регистрация тестов выполнена корректно.Новые тесты правильно добавлены в список тестов, имена соответствуют процедурам, определённым в области #Область ПроверкаКорректностиXML.
419-454: Тесты обработки невалидного XML реализованы корректно.Проверка исключений для некорректных XML-файлов охватывает различные типы файлов. Использование вспомогательного метода
ВызываетсяИсключениеСТекстомс единообразным текстом ошибки обеспечивает согласованность тестов.
456-464: Тест для несуществующего файла реализован корректно.Проверка правильно убеждается, что сценарий возвращает
falseдля несуществующих файлов, что является ожидаемым поведением.
466-474: Тест для не-XML файла реализован корректно.Проверка правильно убеждается, что сценарий не обрабатывает файлы с расширением .bsl (исходные файлы 1C), возвращая
false.
350-351: Организация кода в области выполнена правильно.Новые тесты правильно размещены в отдельной области
#Область ПроверкаКорректностиXML, что соответствует структуре файла и облегчает навигацию.Also applies to: 476-477
Добавлен новый сценарий валидации XML-файла без логики
Summary by CodeRabbit
✏️ Tip: You can customize this high-level summary in your review settings.